<?php
/**
 * memcache扩展类
 * 
 * @author wang Penghai <china_php@hotmail.com>
 * @version $Id$
 */
class pf_memcache extends Memcache
{
	protected $prefix = 'xj_';   //mc前缀
	/**
	 * 构造函数
	 */
	public function __construct($prefix='xj_')
	{
		if(!empty($prefix))
		{
			$this->prefix = $prefix;
		}
		include_once DB_CONF_PATH . 'conf_memcache.php';
		$mamcache_server = (array)$MEMCACHE_SERVER;
		foreach($mamcache_server as $key=>$val)
		{
			parent::addServer($key, $val);
		}
	}
	
	/**
	 * 封装重写get方法
	 *
	 * @param  string|array $key	mc键值（键值数组）
	 * @return $result			  对应的值
	 */
	public function get($key)
	{
		if(is_array($key) && $this->prefix !== '')
		{
			$keys = array();
			foreach ($key as $k=>$v)
			{
				$keys[$v] = $this->prefix . $v;
				$key[$k]  = $this->prefix . $v;
			}
			$result = parent::get($key);
			if(empty($result) || !is_array($result))
			{
				return array();
			}
			$ret = array();
			foreach ($keys as $k=>$v)
			{
				if(array_key_exists($v, $result))
				{
					$ret[$k] = $result[$v];
				}
			}
		}
		else
		{
			$key = $this->prefix . $key;
			$ret = parent::get($key);
		}
		return $ret;
	}
	
	/**
	 * 封装重写set方法
	 *
	 * @param string	   $key	 键名
	 * @param string|array $value   要存的值
	 * @param int		  $flag	是否压缩
	 * @param int		  $expire  过期时间
	 * @return bool		存储是否成功
	 */
	public function set($key, $value, $flag = 0, $expire = 0)
	{
		$key = $this->prefix . $key;
		$ret = parent::set($key, $value, $flag, $expire);
		return $ret;
	}
	
	/**
	 * 封装重写add方法
	 *
	 * @param string	   $key	 键名
	 * @param string|array $value   要存的值
	 * @param bool		 $flag	是否压缩
	 * @param int		  $expire  过期时间
	 * @return bool		存储是否成功
	 */
	public function add($key, $value, $flag = false, $expire = 0)
	{
		$key = $this->prefix . $key;
		$ret = parent::add($key, $value, $flag, $expire);
		return $ret;
	}
	
	/**
	 * 封装重写replace方法
	 *
	 * @param string	   $key	 键名
	 * @param string|array $value   要存的值
	 * @param bool		 $flag	是否压缩
	 * @param int		  $expire  过期时间
	 * @return bool		存储是否成功
	 */
	public function replace($key, $value, $flag = false, $expire = 0)
	{
		$key = $this->prefix . $key;
		$ret = parent::replace($key, $value, $flag, $expire);
		return $ret;
	}
	
	/**
	 * 封装重写increment
	 *
	 * @param string $key	  键名
	 * @param int	$value	增加的值
	 * @return bool			操作是否成功
	 */
	public function increment($key, $value = 1)
	{
		$key = $this->prefix . $key;
		$ret = parent::increment($key, $value);
		return $ret;
	}
	
	/**
	 * 封装重写decrement
	 *
	 * @param string $key	  键名
	 * @param int	$value	增加的值
	 * @return bool			操作是否成功
	 */
	public function decrement($key, $value = 1)
	{
		$key = $this->prefix . $key;
		$ret = parent::decrement($key, $value);
		return $ret;
	}
	
	/**
	 * 封装重写delete
	 *
	 * @param string $key	 键名
	 * @param int	$expire  过期时间
	 */
	public function delete($key, $expire = 0)
	{
		$key = $this->prefix . $key;
		$ret = parent::delete($key, $expire);
		return $ret;
	}
}
?>